package com.demo.Main.StageOne;

import cn.hutool.http.HttpException;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;

import java.io.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 服务器列表会放到一个`server.txt`文件中，
 * 请从`server.txt`文件中读取到服务器列表并发送`http`请求确定服务器上的接收文件服务是否正常，
 * 并在控制台显示检测结果
 */
public class Demo {
    public static void main(String[] args) {
        while (true)
        {
            start();
            try {
                Thread.currentThread().sleep(10000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
    /*
    启动方法
     */
    public static void start()
    {
        // 创建线程池
        ThreadPoolExecutor tpe = new ThreadPoolExecutor(
                5,    // 核心线程数
                10,                 // 最大线程数
                5L,                 // 等待时间
                TimeUnit.SECONDS,   // 时间单位
                new ArrayBlockingQueue<>(5),        // 阻塞队列
                new ThreadPoolExecutor.DiscardOldestPolicy()            // 溢出处理决策
        );

        // 执行线程任务
        tpe.execute(() -> {
            String s = null;
            //
            try (FileReader fis = new FileReader("localfile/server.txt");
                 BufferedReader br = new BufferedReader(fis)) {
                while (br.ready()) {
                    HttpResponse execute = null;
                    try {
                        s = br.readLine();
                        HttpRequest httpRequest = HttpRequest.get(s).timeout(2000);
                        execute = null;
                        execute = httpRequest.execute();
                    } catch (Exception e) {
                        System.err.println(s + "无法访问网络");
                        continue;
                    }

                    int status = execute.getStatus();
                    if (status == 200) {
                        System.out.println(s + " 网站访问成功");
                    } else {
                        System.err.println(s + " 网站访问失败");
                    }
                }
            } catch (IOException e) {
                System.out.println(s + "网站访问失败");
            }
        });
        // 任务执行结束，关闭资源
        tpe.shutdown();
    }
}